import tempfile
import pathlib
from typing import List, IO

from llama_index.core.schema import Document
from llama_index.readers.file import DocxReader

from ..data_parser_interface import DataParserInterface


class DocxParser(DataParserInterface):
    """
    一个专门用于解析 Word (.docx) 文件的解析器。
    它封装了 LlamaIndex 的 DocxReader。
    """

    def parse(self, file: IO[bytes], file_format: str, **kwargs) -> List[Document]:
        """
        从 Word 文件的二进制流中解析出 Document 对象。
        """
        with tempfile.NamedTemporaryFile(delete=False, suffix=f".{file_format}") as tmp_file:
            tmp_file.write(file.read())
            tmp_file_path = pathlib.Path(tmp_file.name)

        try:
            reader = DocxReader()
            return reader.load_data(file=tmp_file_path, **kwargs)
        finally:
            tmp_file_path.unlink() 